import { Controller, Get, Post, Body, Param, Put, Delete, Injectable } from '@nestjs/common';
import { ApiTags, ApiOperation, ApiPropertyOptional } from '@nestjs/swagger';
import { Post as PostSchema } from './post.model';
import { InjectModel } from 'nestjs-typegoose';
import { IsNotEmpty } from 'class-validator';
// import { ReturnModelType } from '@typegoose/typegoose'
import { ModelType } from '@typegoose/typegoose/lib/types';
import { Crud } from 'nestjs-mongoose-crud';

// 定义一个数据传输对象 DTO
class CreatePostDto {
  @ApiPropertyOptional({ description: '帖子标题1', example: '帖子标题1' })
  @IsNotEmpty({ message: '请填写标题' })
  title: string;
  @ApiPropertyOptional({description: '帖子内容1', example: '帖子内容1'})
  content: string;
}

@Crud({
  model: PostSchema,
  routes: {
    find: {
      decorators: [
        ApiOperation({summary: '帖子列表'})
      ]
    },
    create: {
      dto: CreatePostDto
    }
  }
})
@Controller('posts')
@ApiTags('帖子')
@Injectable()
export class PostsController {
  constructor(
    @InjectModel(PostSchema) private readonly model: ModelType<PostSchema>)
   { }

  // // 获取文章列表
  // @Get()
  // @ApiOperation({summary: '显示帖子列表'})
  // async index() {
  //   // return [
  //   //   { id: 1, title: 'C++ Boost博客' },
  //   //   { id: 2, title: 'SpringBoot整合Redis' },
  //   //   { id: 3, title: 'Spring Boot与缓存' },
  //   //   { id: 4, title: 'Nest.js' }
  //   // ]
  //   return await this.postModel.find();
  // }

  // // 创建一篇帖子
  // @Post() 
  // @ApiOperation({summary: '创建帖子'})
  // async create(@Body() createPostDto: CreatePostDto) {
  //   await this.postModel.create(createPostDto);
  //   return {
  //     success: true
  //   };
  // }

  // // 根据id获取某篇帖子的详情
  // @Get(':id')
  // @ApiOperation({summary: '帖子详情'})
  // async detail(@Param('id') id: string) {
  //   return await this.postModel.findById(id);
  // }

  // @Put(':id')
  // @ApiOperation({summary: '更新帖子'})
  // async update(@Param('id') id: string, @Body() updatePostDto: CreatePostDto) {
  //   await this.postModel.findByIdAndUpdate(id, updatePostDto)
  //   return {
  //     success: true
  //   }
  // }

  // @Delete(':id')
  // @ApiOperation({summary: '删除帖子'})
  // async remove(@Param('id') id: string) {
  //   await this.postModel.findByIdAndDelete(id)
  //   return {
  //     success: true
  //   }
  // }
  
}
